﻿using AutoMapper;
using QuanLyGiaoVuDAL.DTO;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace QuanLyGiaoVuUI.Models.GiangVien
{
    public class GiangVienViewModel
    {
        public System.Guid ID { get; set; }

        [Required]
        [Display(Name = "Mã Giảng Viên")]
        public string MaGiangVien { get; set; }

        [Required]
        [Display(Name = "Họ và tên")]

        public string HoTenGV { get; set; }

        [Required]
        [Display(Name = "Giới tính")]
        public string GioiTinh { get; set; }

        [Required]
        [Display(Name = "Ngày sinh")]
        public System.DateTime? NgaySinh { get; set; }

        [Required]
        [Display(Name = "Ngày vào công tác")]
        public DateTime NgayVaoCongTac { get; set; }

        [Required]
        [Display(Name = "Học vị")]
        public int MaHocVi { get; set; }

        [Display(Name = "Học hàm")]
        public System.Nullable<int> MaHocHam { get; set; }

        [Display(Name = "Chức vụ")]
        public Guid? MaChucVu { get; set; }

        [Display(Name = "Địa chỉ")]
        public string DiaChi { get; set; }

        [Display(Name = "Số điện thoại")]
        public string SoDienThoai { get; set; }

        [RegularExpression(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")]
        public string Email { get; set; }

        [Display(Name = "Giảng viên thỉnh giảng")]
        public bool ThinhGiang { get; set; }

        public HocViDTO HocVi { get; set; }

        public HocHamDTO HocHam { get; set; }

        public ChucVuDTO ChucVu { get; set; }

        public ChucDanhDTO ChucDanh { get; set; }

        public IEnumerable<ChucVuDTO> DanhSachChucVu { get; set; }
        public IEnumerable<LopMonHocDTO> DanhSachLopMonHoc { get; set; }
        public IEnumerable<DeTaiDTO> DanhSachDeTai { get; set; }
        public HocKyDTO HocKyHienTai { get; set; }
        public IEnumerable<HocKyDTO> DanhSachHocKy { get; set; }
        public BoMonDTO BoMon { get; set; }

        public String GetHocViHocHam()
        {
            String result = string.Empty;
            if (MaHocHam != null && MaHocHam != -1)
                result = result + HocHam.VietTat + ". ";
            result = result + HocVi.VietTat;
            return result;
        }

        public String GetTenVaHocVi()
        {
            return GetHocViHocHam() + ". " + HoTenGV;
        }

        public GiangVienDTO ToGiangVienDTO()
        {
            Mapper.CreateMap(typeof(GiangVienViewModel), typeof(GiangVienDTO));
            var giangVienDTO = new GiangVienDTO();
            Mapper.Map(this, giangVienDTO);
            return giangVienDTO;
        }

        public static GiangVienViewModel FromGiangvienDTO(GiangVienDTO giangVienDTO)
        {
            Mapper.CreateMap(typeof(GiangVienDTO), typeof(GiangVienViewModel));
            var giangVienViewModel = new GiangVienViewModel();
            Mapper.Map(giangVienDTO, giangVienViewModel);
            return giangVienViewModel ;
        }

        public static IEnumerable<GiangVienViewModel> FromGiangVienDTOList(IEnumerable<GiangVienDTO> giangVienDTOList)
        {
            List<GiangVienViewModel> giangVienViewModelList = new List<GiangVienViewModel>();
            foreach (GiangVienDTO giangvienDTO in giangVienDTOList)
            {
                giangVienViewModelList.Add(GiangVienViewModel.FromGiangvienDTO(giangvienDTO));
            }
            return giangVienViewModelList.AsEnumerable<GiangVienViewModel>();
        }
    }
}